
#钩子函数：
'''
正常来说我们自动化测试执行完成之后，都会发送一个报告，以便相关人员查看测试情况，但是对于经常运行的用例如果每次去打开测试报告查看测试结果，大家就会慢慢不去关注测试结果，所以现在大多数都会采用简单的测试结果提醒，有问题再去查看详细的报告。

通过企业微信、钉钉、短信等发送推送消息(常用)
通过发送邮件
如果 通过企业微信、钉钉、短信等发送推送消息 方式，我们就需要获取当前测试完成后执行情况，在pytest 框架里面有一个Hooks函数 pytest_terminal_summary 就可以轻松获取到执行报告数据，下面我们来具体讲解一下如何使用。

'''
import pytest


# 在收集完测试用例后才会执行
def pytest_collection_modifyitems(items):
    print('pytest 收集到的所有测试用例：\n', items)


def pytest_terminal_summary(terminalreporter, exitstatus, config):
    total_case = terminalreporter._numcollected
    print(terminalreporter.stats)
    pass_case = len([i for i in terminalreporter.stats.get('passed', [])])
    fail_case = len([i for i in terminalreporter.stats.get('failed', [])])
    error_case = len([i for i in terminalreporter.stats.get('error', [])])
    skip_case = len([i for i in terminalreporter.stats.get('skipped', [])])
    # pass_rate = round(pass_case / total_case * 100, 2)

    desc = """
    本次执行情况如下：
    总用例数为：{}
    通过用例数：{}
    失败用例数：{}
    错误用例数：{}
    跳过用例数：{}
    通过率为：  %
    """.format(total_case, pass_case, fail_case, error_case, skip_case)
    print(desc)
    # TODO :此处可以调用微信、钉钉、短信相应方法推送消息
    # WeChat.sendMsg(desc)
    # DingDing.sendMsg(desc)
    # SMS.sendMsg(desc)



    #这句话的意思就是打印出terminalreporter对象里面的属性、方法，为我们后面获取数据使用


@pytest.fixture(scope="session")
def login():
    print("===登录，返回：name，token===")
    name = "xianzhe"
    token = "123456qwe"
    yield name, token
    print("===退出===")



@pytest.fixture()
def set_up():
    print("我是后置操作！", 1 / 0)
    yield
    print("我是后置操作！", 1 / 2)


@pytest.fixture()
def tear_down():
    print("我是后置操作！", 1 / 1)
    yield
    print("我是后置操作！", 1 / 0)

if __name__ == '__main__':
    pytest.main(['-s'])